package main

import (
	"fmt"
	"time"
)

func main() {
	ch := make(chan int)
	go func() {
		for i := 0; i < 3; i++ {
			ch <- i
		}
		close(ch)
	}()
	go func() {
		for info := range ch {
			fmt.Println("info is ", info)
		}
	}()
	time.Sleep(time.Second)
	fmt.Println("main exit")
}

// close(ch) 只标记“写端已结束”，通道对象本身仍然存在；
// 已缓冲的数据仍可继续被读完；
// 再执行 ch <- v 会 panic；
// 读端 <-ch 在缓冲区耗尽后返回 零值 + ok=false；
// range ch 检测到关闭且无数据后自然退出。
